﻿#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <unordered_map>

#include <climits>
using namespace std;

typedef long long ll;

int numberOfArithmeticSlices(vector<int>& nums)
{
	int n = nums.size();
	// 优化
	unordered_map<ll, vector<int>> hash;
	for (int i = 0; i < n; i++)
	{
		hash[nums[i]].push_back(i);
	}

	vector<vector<int>> dp(n, vector<int>(n));		// 创建 dp 表
	int sum = 0;
	for (int i = 2; i < n; i++)						// 固定倒数第一个数
	{
		for (int j = 1; j < i; j++)					// 枚举倒数第二个数
		{
			ll a = (ll)nums[j] * 2 - nums[i];		// 处理数据溢出
			if (hash.count(a))
			{
				for (auto k : hash[a])
				{
					if (k < j)
					{
						dp[j][i] += dp[k][j] + 1;
					}
					else break;
				}
			}
			sum += dp[j][i];
		}
	}
	return sum;
}

int main()
{
	vector<int> v;
	/*v.push_back(2);
	v.push_back(4);
	v.push_back(6);
	v.push_back(8);
	v.push_back(10);*/
	v.push_back(7);
	v.push_back(7);
	v.push_back(7);
	v.push_back(7);
	v.push_back(7);

	cout << numberOfArithmeticSlices(v) << endl;

	return 0;
}